<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>箭头函数没有super</title>
</head>
<body>
<script>
    class User {
        constructor(name) {
            this.name = name
        }

        getName() {
            return this.name
        }
    }

    function read() {
        console.log("read")
    }

    class Student extends User {
        tell() {

            /*
            * 和箭头函数没有自己的this一样箭头函数也没有自己的super 它的super是外面函数的super
            *
            * */
            setTimeout(() => {
                /*
                * 注意 使用 let obj ={}的规则也适用于这里 即调用对象的read必须使用this.read 不然就调用外部的read了
                *
                *  let obj ={
                       name: 'A',
                       getName(){
                          console.log(name)
                    }
                  }
                *  为什么不会访问到内部的name呢？ 因为这是一种简写 其实name是定义在obj身上的 obj.name = 'A'
                *   压根没有定义name这个变量 所以在当前作用域找不到name 只能去上一级作用域寻找
                *
                *
                *   同理这里也是一种简写即read其实是定义在对象的原型身上的 而不是使用function进行直接的定义 所以根本找不到
                *
                * */
                this.read(super.getName())
            }, 1000)
        }

        read(a) {
            console.log(a)
        }
    }

    let stu = new Student('V')
    stu.tell()


</script>
</body>
</html>